﻿#include "HttpClientManager.h"
#include "global.h"
#include "Sqlite/DeviceDBManager.h"
HttpClientManager *HttpClientManager::_pInstance = nullptr;

HttpClientManager::HttpClientManager(QObject *parent) : QObject(parent) { }

HttpClientManager::~HttpClientManager()
{
    if (_pInstance != NULL)
    {
        delete _pInstance;
        _pInstance = NULL;
    }
}

/**
 * @brief 向服务端发送控制指令的响应报文
 */
ResponseModel HttpClientManager::PostGeneralCommandResult(GeneralCmdResult model)
{
    ResponseModel httpResponse;

    // 实体类转化为Json数据流
    string jsonStr;
    JsonHelper::ObjectToJson(model, jsonStr);

    // Json数据转换为字节流
    QByteArray jsonData = QByteArray::fromStdString(jsonStr); // QT5.x

    // 调用服务端的web api
    QString url = urlDev + "/GeneralCommandResult";

    try
    {
        // 发送Http协议帧
        QByteArray responseData = _httpClientController.PostAsync(url, jsonData);

        // 转化为Http消息模型
        std::string str = responseData.toStdString();
        JsonHelper::JsonToObject(httpResponse, str);
    }
    catch (QString ex)
    {
        httpResponse.respCode = "9999";
        httpResponse.respMsg  = QString::fromUtf8("网络异常:").toStdString() + ex.toStdString();
        mylog<<ex;
    }

    return httpResponse;
}

ResponseModel HttpClientManager::PostArchiveRegisterRequest(ArchiveRegisterRequest model)
{
    ResponseModel httpResponse;

    // 实体类转化为Json数据流
    string jsonStr;
    JsonHelper::ObjectToJson(model, jsonStr);
    // Json数据转换为字节流
    QByteArray jsonData = QByteArray::fromStdString(jsonStr); // QT5.x


    // 调用服务端的web api
    QString url = urlDev + "/ArchiveRegisterRequest";

    try
    {
        QByteArray responseData = _httpClientController.PostAsync(url, jsonData);

        // 转化为Http消息模型
        std::string str = responseData.toStdString();
        JsonHelper::JsonToObject(httpResponse, str);
    }
    catch (QString ex)
    {
        httpResponse.respCode = "9999";
        httpResponse.respMsg  = QString::fromUtf8("网络异常:").toStdString() + ex.toStdString();
    }

    return httpResponse;
}

DevArvStatisticsModel HttpClientManager::GetDevArvStatistics()
{
    MessageModel<DevArvStatisticsModel> response;
    QVariantMap  params = {{"deviceNo",DeviceDBManager::getInstance()->getDeviceInfo("DeviceNo").toInt()}};

    // 调用服务端的web api
    QString url = urlApi + QString("/Statistics/GetDevArvStatistics?");
    try
    {
        // 发送Http协议帧
        QByteArray responseData = _httpClientController.GetAsync(url, params);

        // 转化为Http消息模型
        std::string str = responseData.toStdString();
        JsonHelper::JsonToObject(response, str);
    }
    catch (QString ex)
    {
        mylog<<ex;
    }

    return response.response;
}

///**
// * @brief HttpClientManager::PostProbeCommandResult 向服务端发送状态探测指令的响应报文
// * @param model
// * @return
// */
//ResponseModel HttpClientManager::PostProbeCommandResult(ProbeCmdResult model)
//{
//    ResponseModel httpResponse;

//    // 实体类转化为Json数据流
//    string jsonStr;
//    JsonHelper::ObjectToJson(model, jsonStr);
//    // Json数据转换为字节流
//    // QByteArray jsonData = QByteArray::fromStdString(jsonStr); // QT5.x
//    QByteArray jsonData(jsonStr.c_str(), jsonStr.length());     // QT4.8

//    // 调用服务端的web api
//    QString url = _controller + "/ProbeCommandResult";

//    try
//    {
//        QByteArray responseData = _httpClientController.PostAsync(url, jsonData);

//        // 转化为Http消息模型
//      //  std::string str = responseData.toStdString();
//        std::string str(responseData.constData(), responseData.length());
//        JsonHelper::JsonToObject(httpResponse, str);
//    }
//    catch (QString ex)
//    {
//        httpResponse.respCode = "9999";
//        httpResponse.respMsg  = QString::fromUtf8("网络异常:").toStdString() + ex.toStdString();
//    }

//    return httpResponse;
//}

///**
// * @brief HttpClientManager::PostDevWarningRequest 设备端上报服务端设备报警信息
// * @param model
// * @return
// */
//ResponseModel HttpClientManager::PostDevWarningRequest(WarningRequest model)
//{
//    ResponseModel httpResponse;

//    // 实体类转化为Json数据流
//    string jsonStr;
//    JsonHelper::ObjectToJson(model, jsonStr);
//    // Json数据转换为字节流
//    // QByteArray jsonData = QByteArray::fromStdString(jsonStr); // QT5.x
//    QByteArray jsonData(jsonStr.c_str(), jsonStr.length());     // QT4.8

//    // 调用服务端的web api
//    QString url = _controller + "/DevWarningRequest";

//    try
//    {
//        QByteArray responseData = _httpClientController.PostAsync(url, jsonData);

//        // 字节流转换为字符串
// //     std::string str = responseData.toStdString();                     // QT5.x
//        std::string str(responseData.constData(), responseData.length()); // QT4.8
//        // 转化为Http消息模型
//        JsonHelper::JsonToObject(httpResponse, str);
//    }
//    catch (QString ex)
//    {
//        httpResponse.respCode = "9999";
//        httpResponse.respMsg  = QString::fromUtf8("网络异常:").toStdString() + ex.toStdString();
//    }

//    return httpResponse;
//}

///**
// * @brief HttpClientManager::PostDevRegisterRequest 设备端注册至服务端
// * @param model
// * @return
// */
//ResponseModel HttpClientManager::PostDevRegisterRequest(DevRegRequest model)
//{
//    ResponseModel httpResponse;

//    // 实体类转化为Json数据流
//    string jsonStr;
//    JsonHelper::ObjectToJson(model, jsonStr);
//    // Json数据转换为字节流
//    // QByteArray jsonData = QByteArray::fromStdString(jsonStr); // QT5.x
//    QByteArray jsonData(jsonStr.c_str(), jsonStr.length());     // QT4.8

//    // 调用服务端的web api
//    QString url = _controller + "/DevRegisterRequest";

//    try
//    {
//        QByteArray responseData = _httpClientController.PostAsync(url, jsonData);

//        // 字节流转换为字符串
// //     std::string str = responseData.toStdString();                     // QT5.x
//        std::string str(responseData.constData(), responseData.length()); // QT4.8
//        // 转化为Http消息模型
//        JsonHelper::JsonToObject(httpResponse, str);
//    }
//    catch (QString ex)
//    {
//        httpResponse.respCode = "9999";
//        httpResponse.respMsg  = QString::fromUtf8("网络异常:").toStdString() + ex.toStdString();
//    }

//    return httpResponse;
//}

///**
// * @brief HttpClientManager::PostDevRfidMonitorRequest 设备端上报当前层标签监控信息到服务端
// * @param model
// * @return
// */
//ResponseModel HttpClientManager::PostDevRfidMonitorRequest(RfidMonitorRequest model)
//{
//    ResponseModel httpResponse;

//    // 实体类转化为Json数据流
//    string jsonStr;
//    JsonHelper::ObjectToJson(model, jsonStr);
//    // Json数据转换为字节流
//    // QByteArray jsonData = QByteArray::fromStdString(jsonStr); // QT5.x
//    QByteArray jsonData(jsonStr.c_str(), jsonStr.length());     // QT4.8

//    // 调用服务端的web api
//    QString url = _controller + "/RfidMonitorRequest";

//    try
//    {
//        QByteArray responseData = _httpClientController.PostAsync(url, jsonData);

//        // 字节流转换为字符串
// //     std::string str = responseData.toStdString();                     // QT5.x
//        std::string str(responseData.constData(), responseData.length()); // QT4.8
//        // 转化为Http消息模型
//        JsonHelper::JsonToObject(httpResponse, str);
//    }
//    catch (QString ex)
//    {
//        httpResponse.respCode = "9999";
//        httpResponse.respMsg  = QString::fromUtf8("网络异常:").toStdString() + ex.toStdString();
//    }

//    return httpResponse;
//}

/**
 * @brief HttpClientManager::GetSearchArchives 档案查询
 * @param devNo       设备编号
 * @param searchType  查询key编号 0-档案盒编号 1-档案盒名称 2-档案编号 3-档案名称 4-部门 5- 档案类型
 * @param searchInfo  查询内容
 * @param pageIndex   分页检索
 * @param pageSize    每页记录数
 * @return
 */
DevArvSearchResponse HttpClientManager::GetSearchArchives(QVariantMap  params)
{
    DevArvSearchResponse httpResponse;

    // 调用服务端的web api
    QString url = urlDev + QString("/DevArchiveSearchRequest");

//    try
//    {
        QByteArray responseData = _httpClientController.GetAsync(url, params);

        // 字节流转换为字符串
        std::string str = responseData.toStdString();                     // QT5.x
        // 转化为Http消息模型
        JsonHelper::JsonToObject(httpResponse, str);
//    }
//    catch (QString ex)
//    {
//        throw QString::fromUtf8("网络异常:").toStdString() + ex.toStdString();
//    }

    return httpResponse;
}

///**
// * @brief HttpClientManager::GetCurLayerArchives 获得当前层档案
// * @param devNo        设备编号
// * @param layerNo      设备层号
// * @param pageIndex    分页检索
// * @param pageSize     每页记录数
// * @return
// */
//DevArvSearchResponse HttpClientManager::GetCurLayerArchives(int devNo, int layerNo, int pageIndex, int pageSize)
//{
//    DevArvSearchResponse httpResponse;
//    QVariantMap          params;

//    // 调用服务端的web api
//    QString url = _controller + QString("/GetCurLayerArchives?devNo=%1&layerNo=%2&pageIndex=%3&pageSize=%4").arg(devNo).arg(layerNo).arg(pageIndex).arg(pageSize);

//    try
//    {
//        QByteArray responseData = _httpClientController.GetAsync(url, params);

//        // 字节流转换为字符串
// //     std::string str = responseData.toStdString();                     // QT5.x
//        std::string str(responseData.constData(), responseData.length()); // QT4.8
//        // 转化为Http消息模型
//        JsonHelper::JsonToObject(httpResponse, str);
//    }
//    catch (QString ex)
//    {
//        throw QString::fromUtf8("网络异常:").toStdString() + ex.toStdString();
//    }

//    return httpResponse;
//}

///**
// * @brief HttpClientManager::GetDevLocationInfo 获取当前设备货位信息
// * @param devNo     设备编号
// * @param layerNo   设备层号
// * @return
// */
//DevLocationResponse HttpClientManager::GetDevLocationInfo(int devNo, int layerNo)
//{
//    DevLocationResponse httpResponse;
//    QVariantMap         params;

//    // 调用服务端的web api
//    QString url = _controller + QString("/DevLocationInfoRequest?devNo=%1&layerNo=%2").arg(devNo).arg(layerNo);

//    try
//    {
//        QByteArray responseData = _httpClientController.GetAsync(url, params);

//        // 字节流转换为字符串
// //     std::string str = responseData.toStdString();                     // QT5.x
//        std::string str(responseData.constData(), responseData.length()); // QT4.8
//        // 转化为Http消息模型
//        JsonHelper::JsonToObject(httpResponse, str);
//    }
//    catch (QString ex)
//    {
//        throw QString::fromUtf8("网络异常:").toStdString() + ex.toStdString();
//    }

//    return httpResponse;
//}

///**
// * @brief HttpClientManager::GetDevLogo 获取设备端Logo
// * @return
// */
//QByteArray HttpClientManager::GetDevLogo()
//{
//    QVariantMap params;

//    // 调用服务端的web api
//    QString url = DeviceParamsConfig::GetInstance()->getLogoUrl();

//    try
//    {
//        return _httpClientController.GetAsync(url, params);
//    }
//    catch (QString ex)
//    {
//        throw QString::fromUtf8("网络异常:").toStdString() + ex.toStdString();
//    }

//    return NULL;
//}
